package dominioEntity;

import hbt.PersistentObject;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import dominioTO.MovimientoStockTO;
import dominioTO.RodamientoTO;

//Rodamiento lado Servidor DAO (Persistencia)
@Entity
public class Rodamiento extends PersistentObject {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String nSerie;
	private String sufijo;
	private String prefijo;
	private String descripcion;
	private Integer stock;
	private Integer puntoRep; 
	
	@LazyCollection(LazyCollectionOption.FALSE)
	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name = "rodamiento_id")
	private List<MovimientoStock> movimientosStock;
	
	
	
	
	public Rodamiento() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	
	//Getters & Setters
	public String getPrefijo() {
		return prefijo;
	}
	public void setPrefijo(String prefijo) {
		this.prefijo = prefijo;
	}
	public String getnSerie() {
		return nSerie;
	}
	public void setnSerie(String nSerie) {
		this.nSerie = nSerie;
	}
	public String getSufijo() {
		return sufijo;
	}
	public void setSufijo(String sufijo) {
		this.sufijo = sufijo;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public Integer getStock() {
		return stock;
	}
	public void setStock(Integer stock) {
		this.stock = stock;
	}
	public Integer getPuntoRep() {
		return puntoRep;
	}
	public void setPuntoRep(Integer puntoRep) {
		this.puntoRep = puntoRep;
	}
	public List<MovimientoStock> getMovimientosStock() {
		return movimientosStock;
	}
	public void setMovimientosStock(List<MovimientoStock> movimientosStock) {
		this.movimientosStock = movimientosStock;
	}
	
	
	public RodamientoTO getDTO()
	{
		RodamientoTO aux = new RodamientoTO();
		aux.setPrefijo(prefijo);
		aux.setnSerie(nSerie);
		aux.setSufijo(sufijo);
		aux.setDescripcion(descripcion);
		if(movimientosStock!=null)
		{
			List<MovimientoStockTO> auxListTO = new ArrayList<MovimientoStockTO>();
			for(MovimientoStock movStock : movimientosStock)
			{
				auxListTO.add(movStock.getDTO());
			}
			aux.setMovimientosStock(auxListTO);	
		}
		
		
		return aux;		
	}
	public static Rodamiento convertirTO(RodamientoTO dto)
	{
		Rodamiento aux = new Rodamiento();
		aux.setPrefijo(dto.getPrefijo());
		aux.setnSerie(dto.getnSerie());
		aux.setSufijo(dto.getSufijo());
		aux.setDescripcion(dto.getDescripcion());
		if(dto.getMovimientosStock()!=null)
		{
			List<MovimientoStock> auxList = new ArrayList<MovimientoStock>();
			List<MovimientoStockTO> dtoMovStockList = dto.getMovimientosStock();
			for(MovimientoStockTO movStockTO : dtoMovStockList)
			{
				auxList.add(MovimientoStock.convertirTO(movStockTO));
			}
			aux.setMovimientosStock(auxList);	
		}		
		return aux;		
	}


	@Override
	public String toString() {
		return "Rodamiento [nSerie=" + nSerie + ", sufijo=" + sufijo
				+ ", prefijo=" + prefijo + ", descripcion=" + descripcion
				+ ", stock=" + stock + ", puntoRep=" + puntoRep
				+ ", movimientosStock=" + movimientosStock + "]";
	}

	
}
